package cn.tedu.api;

/**
 * Date：2021年10月
 * Author：程Sir
 * Name： JavaSE-API
 * Content:
 */
public class StringDemo {
    public static void main(String[] args) {
        /**
         * 字符串创建对象的两种方式
         */
        String a = new String("123");
        String b = "123";

        /*a和b相等吗？*/
        System.out.println(a.equals(b)); // true
        System.out.println("============");


        String e = a + b;
        String f = "123" + "123"; // "123123"  这个值常量池中没有，则在常量池中创建，而后让f进行引用
        String ff = "123123"; // jvm拿着ff的值”123123“在常量池中进行比较，发现已经有了，那么就直接引用常量池中的对象地址
        /*f和ff相等吗？*/

        System.out.println("猜想："+(ff==f)); // true  两个不同的引用指向了常量池中的同一个对象
        System.out.println(ff.equals(f)); //true
        System.out.println("===========");

        /*e和f相等吗？*/
        System.out.println(e==f); // false
        System.out.println(e.equals(f)); // true
        System.out.println("============");



        String g = "123" + new String("123");// 创建了几个对象？
        /*e和g相等吗？f和g相等吗？*/

        String h = new String("123") + new String("123"); // 创建了几个对象？
        /*e和h相等吗？f和h相等吗？g和h相等吗？*/

    }
}
